home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus 1996 #1
/
Amiga Plus CD - 1996 - No. 1.iso
/
pd
/
netz
/
xbtx_v1.1
/
main.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
1995-09-26
|
11KB
|
392 lines
/*
** $Id: Main.cpp 1.5 1995/09/26 19:45:11 olsen Exp olsen $
**
** :ts=4
*/
/*
* Copyright © 1995 by Olaf Barthel, All Rights Reserved
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
* EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This software has not been validated by the ``Bundesamt fuer Zulassungen in
* der Telekommunikation'' of the ``Deutsche Bundepost Telekom'' and thus
* must not be used for accessing the BTX-Network of the Telekom in Germany.
*
* Diese Software hat keine Zulassung durch das Bundesamt fuer Zulassungen in
* der Telekommunikation der Deutschen Bundespost Telekom und darf daher nicht
* am Netz der Deutschen Bundespost Telekom in Deutschland betrieben werden.
*/
#include "Application.hpp"
#include <dos/dosextens.h>
#include <dos/rdargs.h>
#include <clib/dos_protos.h>
#include <clib/utility_protos.h>
#ifdef __SASC
#include <pragmas/dos_pragmas.h>
#include <pragmas/utility_pragmas.h>
extern struct Library *UtilityBase;
extern struct DosLibrary *DOSBase;
#endif // __SASC
#include <stdlib.h>
#include <string.h>
#include <stddef.h>
#include <stdio.h>
#ifdef __SASC
char *verstag = "\0$VER: xBTX 1.1 " __AMIGADATE__ "\r\n";
#else
char *verstag = "\0$VER: xBTX 1.1 (26.09.95)\r\n";
#endif // __SASC
#define TEMPLATE "DEVICE/K,UNIT/K/N,BAUD/K/N,RTSCTS/K,INIT/K,DIAL/K,NUMBER/K,HANGUP/K,FILE/K,SCALEX/K/N,SCALEY/K/N,TEXT/S,SCREEN=PUBSCREEN/K,DIRECT/S"
enum { ARG_DEVICE,ARG_UNIT,ARG_BAUD,ARG_RTSCTS,ARG_INIT,ARG_DIAL,
ARG_NUMBER,ARG_HANGUP,ARG_FILE,ARG_SCALEX,ARG_SCALEY,ARG_TEXT,
ARG_PUBSCREEN,ARG_DIRECT,
ARGCOUNT
};
/****** XBTX/XBTX ***********************************************************
*
* NAME
* XBTX -- BTX/Datex-J decoder (V39)
*
* SYNOPSIS
* DEVICE/K,UNIT/K/N,BAUD/K/N,RTSCTS/K,INIT/K,DIAL/K,NUMBER/K,HANGUP/K,
* FILE/K,SCALEX/K/N,SCALEY/K/N,TEXT/S,SCREEN=PUBSCREEN/K,DIRECT/S
*
* FUNCTION
* XBTX is a BTX/Datex-J decoder developed by Arno Augustin and
* Frank Höring at the University of Erlangen-Nuremberg, Germany.
* This Amiga version is based upon the original X-Windows
* implementation, it adds Telesoftware 3-in-4 format download
* capabilities.
*
* REQUIREMENTS
* XBTX requires Amiga operating system v3.0 or higher, an Amiga
* equipped with at least an MC68020 CPU and if possible video
* hardware capable of displaying at least 60 distinctly different
* colours. If XBTX is unable to allocate at least 60 colours for
* use, it will fall back to a text-only display. Your Amiga better
* be real fast, as the BTX font conversion routines are dog slow.
* XBTX must be started from Shell, it does not run from Workbench yet.
*
* INPUTS
* DEVICE/K
* Amiga device driver to use, default is "serial.device".
*
* UNIT/K/N
* Amiga device unit number to use, default is 0.
*
* BAUD/K/N
* Baud rate to use; if not specified the default baud rate
* of the device driver will be used.
*
* RTSCTS/K
* Turn RTS/CTS handshaking on or off; if not specified the
* default hardware handshaking mode of the device driver
* will be used.
*
* INIT/K
* Modem initialization command, default is "ATE1V1Q0^M".
*
* DIAL/K
* Modem dialing command to use, default is "~~ATD".
*
* NUMBER/K
* Phone number to dial in order to connect to the Datex-J
* service, default is "01910".
*
* HANGUP/K
* Modem hang up command to use, default is "~~+++~~ATH0^M".
*
* FILE/K
* Name of prerecorded file to playback.
*
* SCALEX/K/N
* Factor by which to scale the display in the horizontal
* direction, must be between 1 and 8; default is 1. This
* only works with the graphics display.
*
* SCALEY/K/N
* Factor by which to scale the display in the vertical
* direction, must be between 1 and 8; default is 1. This
* only works with the graphics display.
*
* TEXT/S
* Use the text-only display.
*
* SCREEN=PUBSCREEN/K
* Open the display on the named public screen.
*
* DIRECT/S
* Build screen characters directly on the screen, do not use
* a temporary offscreen buffer. Will save some memory and may
* increase on-screen rendering speed, but then maybe not.
*
* MODEM COMMANDS
* You can include simple control sequences in the modem commands.
* The tilde (~) causes a delay of about a second. Prefixing a
* character with a caret (^) will turn it into a control code,
* for example ^M gives a carriage return (or Control-M).
*
* EXAMPLE
* Dial into the fast modem service with RTS/CTS handshaking
* enabled:
* xbtx rtscts=on number=051119304
*
* Dial into the slow modem service with RTS/CTS handshaking
* disabled:
* xbtx rtscts=off
*
* Open a text-only display on the `term' public screen:
* xbtx text screen=term
*
* NOTES
* This software has not been validated or approved by the
* "Bundesamt für Zulassungen in der Telekommunikation" of the
* "Deutsche Bundepost Telekom" and thus must not be used for
* accessing the BTX-Network of the Telekom in Germany. It is
* provided solely for educational purposes only.
*
* This software is provided by the authors "as is" and any
* express or implied warranties, including, but not limited
* to, the implied warranties of merchantability and fitness
* for a particular purpose are disclaimed. In no event shall
* the authors be liable for any direct, indirect, incidental,
* special, exemplary, or consequential damages (including,
* but not limited to, procurement of substitute goods or
* services; loss of use, data, or profits; or business
* interruption) however caused and on any theory of
* liability, whether in contract, strict liability, or tort
* (including negligence or otherwise) arising in any way out
* of the use of this software, even if advised of the
* possibility of such damage.
*
* You have been warned, kids.
*
*
* Incidentally, this is my first major attempt at C++
* programming. Any changes I made to the code are
* really © Copyright 1995 by Olaf Barthel.
*
* BUGS
* The font decoding and output routines are neither blazingly
* fast, nor shockingly well designed, but they get the job
* done. Flashing characters are not supported (yet). The
* Telesoftware download routines do not support the eight bit
* transparency mode as the specifications were a bit thin.
* Concealed characters are always revealed, there is no option
* to have them concealed.
*
* AUTHORS
* Arno Augustin, University of Erlangen-Nuremberg,
* (aoaugust@cip.informatik.uni-erlangen.de)
*
* Frank Höring, University of Erlangen-Nuremberg,
* (fkhoerin@cip.informatik.uni-erlangen.de)
*
* Olaf Barthel
* (olsen@sourcery.han.de)
*
* SEE ALSO
* "Functional Specification for BTX-Terminals", DBP Telekom
* xbtx - a Bildschirmtext-decoder for the X-Window system
*
*****************************************************************************
*
*/
void
main(int argc,char **argv)
{
if(argc)
{
extern struct DosLibrary *DOSBase;
if(DOSBase -> dl_lib . lib_Version >= 39)
{
struct RDArgs *Args;
STRPTR Array[ARGCOUNT];
memset(Array,0,sizeof(Array));
if(Args = ReadArgs(TEMPLATE,(LONG *)Array,NULL))
{
Application App;
STRPTR Device;
LONG Unit;
LONG Baud;
BOOL RTS_CTS;
BOOL TextOnly;
BOOL Direct;
STRPTR Init;
STRPTR Dial;
STRPTR Number;
STRPTR Hangup;
STRPTR File;
LONG ScaleX,
ScaleY;
STRPTR Screen;
STRPTR Error;
if(Array[ARG_DEVICE])
Device = Array[ARG_DEVICE];
else
Device = "serial.device";
if(Array[ARG_UNIT])
Unit = *(LONG *)Array[ARG_UNIT];
else
Unit = 0;
if(Array[ARG_BAUD])
Baud = *(LONG *)Array[ARG_BAUD];
else
Baud = 0;
if(Array[ARG_RTSCTS])
{
STATIC struct { STRPTR String; BOOL Value; } BoolTable[] =
{
"on", TRUE,
"true", TRUE,
"yes", TRUE,
"y", TRUE,
"t", TRUE,
"off", FALSE,
"false",FALSE,
"no", FALSE,
"n", FALSE,
"f", FALSE,
NULL
};
WORD i;
RTS_CTS = -1;
for(i = 0 ; BoolTable[i] . String ; i++)
{
if(!Stricmp(BoolTable[i] . String,Array[ARG_RTSCTS]))
{
RTS_CTS = BoolTable[i] . Value;
break;
}
}
}
else
RTS_CTS = -1;
if(Array[ARG_INIT])
Init = Array[ARG_INIT];
else
Init = "ATE1V1Q0^M";
if(Array[ARG_DIAL])
Dial = Array[ARG_DIAL];
else
Dial = "~~ATD";
if(Array[ARG_NUMBER])
Number = Array[ARG_NUMBER];
else
Number = "01910";
if(Array[ARG_HANGUP])
Hangup = Array[ARG_HANGUP];
else
Hangup = "~~+++~~ATH0^M";
if(Array[ARG_FILE])
File = Array[ARG_FILE];
else
File = NULL;
if(Array[ARG_SCALEX])
ScaleX = *(LONG *)Array[ARG_SCALEX];
else
ScaleX = 1;
if(Array[ARG_SCALEY])
ScaleY = *(LONG *)Array[ARG_SCALEY];
else
ScaleY = 1;
if(Array[ARG_TEXT])
TextOnly = TRUE;
else
TextOnly = FALSE;
if(Array[ARG_DIRECT])
Direct = TRUE;
else
Direct = FALSE;
if(Array[ARG_PUBSCREEN])
Screen = Array[ARG_PUBSCREEN];
else
Screen = NULL;
Error = App.Open(Screen,ScaleX,ScaleY,TextOnly,Direct,File ? File : Device,Unit,Baud,RTS_CTS);
if(Error)
Printf("xBTX: %s\n",Error);
else
{
if(App.AppModem)
{
if(App.AppModem->Connect(Init,Dial,Number,Hangup) == MODEM_Connect)
App.DoEvent();
else
App.WaitForUserInput();
}
else
App.DoEvent();
App.Close();
}
FreeArgs(Args);
exit(RETURN_OK);
}
else
{
PrintFault(IoErr(),"xBTX");
exit(RETURN_FAIL);
}
}
else
exit(RETURN_FAIL);
}
}